import { Injectable } from '@angular/core';
import { StorageService } from "./StorageService";
/**
 * 本地存储，用于存储前一个画面的数据。
 */
@Injectable()
export class SessionStorageService implements StorageService {
    /**
     * 存储对象。
     *
     * @private
     * @type {Storage}
     * @memberof SessionStorageService
     */
    private _storage: Storage;
    /**
     * 构造函数。
     */
    constructor() {
        if (!sessionStorage) {
            throw new Error('浏览器不支持会话存储！');
        }
        else {
            this._storage = window.sessionStorage;
        }
    }
    /**
     * 设置字符串类型的数据。
     *
     * @param scope 范围，如画面ID
     * @param name 名称
     * @param value 值
     */
    public setString(scope: string, name: string, value: string): void {
        let storageKey = this.createKey(scope, name);
        this._storage.setItem(storageKey, value);
    }
    /**
     * 取得字符串类型的数据。
     *
     * @param scope 范围，如画面ID
     * @param name 名称
     */
    public getString(scope: string, name: string): string {
        let storageKey = this.createKey(scope, name);
        return this._storage.getItem(storageKey);
    }
    /**
     * 设置对象类型的数据。
     *
     * @param scope 范围，如画面ID
     * @param name 名称
     * @param value 值
     */
    public setObject(scope: string, name: string, value: any): void {
        let storageKey = this.createKey(scope, name);
        this._storage.setItem(storageKey, JSON.stringify(value));
    }
    /**
     * 取得对象类型的数据。
     *
     * @param scope 范围，如画面ID
     * @param name 名称
     */
    public getObject(scope: string, name: string): any {
        let storageKey = this.createKey(scope, name);
        return JSON.parse(this._storage.getItem(storageKey) || '{}');
    }
    /**
     * 删除存储。
     *
     * @param scope 范围，如画面ID
     * @param name 名称
     */
    public delete(scope, name) {
        let storageKey = this.createKey(scope, name);
        this._storage.removeItem(storageKey);
    }
    private createKey(scope, name) {
        return scope + "." + name;
    }
}
